/* axios 二次封装 */
import axios from 'axios'
import { Toast } from 'vant'

// 创建 axios 实例
const service = axios.create({
  // baseURL: 'http://rap2api.taobao.org/app/mock/283272',
  timeout: 5000
})

// 请求拦截
service.interceptors.request.use(config => {
  // 显示加载数据的提示
  Toast.loading({
    message: '加载中...',
    forbidClick: true,
    duration: 0
  })

  // 向请求头中添加用于用户身份认证的 token
  // TODO......

  return config
})

// 响应拦截
service.interceptors.response.use(res => {
  // 响应返回时，关闭加载提示
  Toast.clear()

  // 由于 axios 对响应数据进行了包装，所以判断其 status 状态
  if (res.status >= 200 && res.status < 300) { // 成功
    // res.data 中包装的是后端接口返回的数据
    // 后端与前端也有数据规范，所以继续判断该规范格式
    if (res.data.code === 200) { // 成功
      return res.data.data
    }
    const e = new Error('后端接口数据异常')
    e.error = res.data
    return Promise.reject(e)
  }
  const error = new Error('接口请求异常')
  error.error = res
  return Promise.reject(error)
})

// 导出 axios 实例
export default service
